package com.hsu.hsurpc.model;

import cn.hutool.core.util.StrUtil;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 服务元信息（注册信息）
 * @Author Hsu琛君珩
 * @Date 2024-09-20 16:35
 * @Description
 * @Version: v1.0.0
 */
@Data
public class ServiceMetaInfo {

    /**
     * 服务名称
     */
    private String serviceName;

    /**
     * 服务版本号
     */
    private String serviceVersion = "1.0";

    /**
     * 服务域名
     */
    private String serviceHost;

    /**
     * 服务端口号
     */
    private Integer servicePort;

    /**
     * 服务节点注册时间
     */
    private LocalDateTime registerTime;

    /**
     * 服务分组（暂未实现）
     * 可用于将服务分类，比如按环境或业务进行分组。
     */
    private String serviceGroup = "default";

    /**
     * 获取服务键名
     * 键名格式为 "服务名称:版本号"
     *
     * @return 服务键名，格式: serviceName:serviceVersion
     */
    public String getServiceKey() {
        // 扩展时可将服务分组加入键名中。
        // return String.format("%s:%s:%s", serviceName, serviceVersion, serviceGroup);
        return String.format("%s:%s", serviceName, serviceVersion);
    }

    /**
     * 获取服务注册节点键名
     * 键名格式为 "服务键名/主机:端口号"
     *
     * @return 服务节点键名，格式: serviceName:serviceVersion/serviceHost:servicePort
     */
    public String getServiceNodeKey() {
        return String.format("%s:%s:%s", getServiceKey(), serviceHost, servicePort);
    }

    /**
     * 获取完整服务地址
     *
     * @return 完整服务地址（http://host:port）
     */
    public String getServiceAddress() {
        if (!StrUtil.contains(serviceHost, "http")) {
            return String.format("http://%s:%s", serviceHost, servicePort);
        }
        return String.format("%s:%s", serviceHost, servicePort);
    }
}
